// -*- coding: utf-8 -*- 
/**
 * Project: AlgorithmsLearn
 * Creator: yanking
 * Create time: 2022-02-24 09:47
 * IDE: IntelliJ IDEA
 * Introduction:
 */
package com.leetCode.putFruites;

public class FruitsIntoBasketsUpdate {
    // 需要记录前一段和前前段连续相同种类果树的数量和种类，用于找寻最大两类连续相连果树
    public int totalFruit(int[] fruits) {
        int path = 1, sum = 0, preSum = 0;
        int cT = fruits[0], t = -1, pT = -1;// 当前种类，前一种类，前前种类
        int len = fruits.length;
        int res = 0;
        for (int i = 1; i < len; i++) {
            if (fruits[i] != fruits[i - 1]) {
                if (cT == pT) {// 当前种类和上一种类不同但是和上上种类相同，可以继续采集
                    res = Math.max(res, path + preSum + sum);
                } else {// 当前种类和上一种类不同和上上种类也不相同，不可以继续采集，需要对数据进行重置
                    res = Math.max(res, path + sum);
                }
                preSum = sum;
                sum = path;
                path = 1;
                pT = t;
                t = cT;
                cT = fruits[i];
            } else {
                ++path;
            }
        }
        if (cT == pT) {// 当前种类和上一种类不同但是和上上种类相同，可以继续采集
            res = Math.max(res, path + preSum + sum);
        } else {// 当前种类和上一种类不同和上上种类也不相同，不可以继续采集，需要对数据进行重置
            res = Math.max(res, path + sum);
        }
        return res;
    }
}
